HTMLify

app.js
Views: 34 | Author: cody
// SELECT PLAY AND PAUSE BUTTON
const play = document.querySelector(".play"),
  pause = document.querySelector(".pause");
// SELECT AUDIO ELEMENT
const audio = document.querySelector(".audio audio");

// PLAY AUDIO
play.addEventListener("click", () => {
  audio.play();
  update();
});
// PAUSE AUDIO
pause.addEventListener("click", () => {
  audio.pause();
});

// SELECT SEASONS AND THE VIDEO
const seasons = document.querySelectorAll(".season"),
  video = document.querySelector(".video video");
// CHANGE VIDEO
seasons.forEach((season) => {
  season.addEventListener("click", () => {
    video.src = season.getAttribute("video-src");
  });
});

// SELECT DURATION BUTTONS
const durations = document.querySelectorAll(".duration");

// DEFAULT AUDIO DURATION
let audioDuration = 120; // 2min

// CHANGE AUDIO DURATION
durations.forEach((duration) => {
  duration.addEventListener("click", () => {
    audioDuration = duration.getAttribute("audio-duration");
    update();
  });
});

// SELECT RECT and RMAINING TIME ELEMENT
const path = document.querySelector(".rect"),
  remainingTimeEl = document.querySelector(".audio-remaining-time");

// TOTAL LENGTH OF THE PATH (PERIMETER OF THE RECTANGLE)
const pathLength = path.getTotalLength();
// SET THE LENGTH OF A DASH TO pathLength
path.style.strokeDasharray = pathLength;

function update() {
  // STOP AUDIO
  if (audio.currentTime >= audioDuration) {
    audio.pause(); // pause audio
    audio.currentTime = 0; // stop audio
  }

  // PORTION PLAYED FROM THE AUDIO
  let portionPlayed = audio.currentTime / audioDuration;

  // STROKE DASHOFFSET IS PROPOTIONAL TO the portionPlayed
  path.style.strokeDashoffset = -portionPlayed * pathLength;

  // CALCULATE REMAINING TIME IN SEC
  let remainingTimeInSec = audioDuration - audio.currentTime;
  renderRemainingTime(remainingTimeInSec);

  if (!audio.paused) {
    requestAnimationFrame(update);
    console.log("update");
  }
}
update();

// RENDER REMAINING TIME
function renderRemainingTime(timeInSec) {
  let min = Math.floor(timeInSec / 60);
  let sec = Math.floor(timeInSec % 60);

  // IF min/sec is a single digit(ex:9) we add a zero before the digit. (ex: 9 becomes 09)
  min = min < 10 ? `0${min}` : min;
  sec = sec < 10 ? `0${sec}` : sec;

  remainingTimeEl.innerHTML = `${min}:${sec}`;
}

Comments